home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Language/OS - Multiplatform Resource Library
/
LANGUAGE OS.iso
/
gnu
/
smaltalk.lha
/
smalltalk-1.1.1
/
MappedCollection.st
< prev
next >
Wrap
Text File
|
1991-09-12
|
3KB
|
126 lines
"======================================================================
|
| MappedCollection Method Definitions
|
======================================================================"
"======================================================================
|
| Copyright (C) 1990, 1991 Free Software Foundation, Inc.
| Written by Steve Byrne.
|
| This file is part of GNU Smalltalk.
|
| GNU Smalltalk is free software; you can redistribute it and/or modify it
| under the terms of the GNU General Public License as published by the Free
| Software Foundation; either version 1, or (at your option) any later version.
|
| GNU Smalltalk is distributed in the hope that it will be useful, but WITHOUT
| ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
| FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
| details.
|
| You should have received a copy of the GNU General Public License along with
| GNU Smalltalk; see the file COPYING. If not, write to the Free Software
| Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
|
======================================================================"
"
| Change Log
| ============================================================================
| Author Date Change
| sbyrne 25 Apr 89 created.
|
"
Collection subclass: #MappedCollection
instanceVariableNames: 'domain map'
classVariableNames: ''
poolDictionaries: ''
category: nil.
MappedCollection comment:
'I represent collections of objects that are indirectly indexed by names.
There are really two collections involved: domain and a map. The map maps
between external names and indices into domain, which contains the
real association. In order to work properly, the domain and map objects must
be instances of a subclass of SequenceableCollection or Dictionary. ' !
!MappedCollection class methodsFor: 'basic'!
collection: aCollection map: aMap
^self new setCollection: aCollection andMap: aMap
!
new
self error: 'new not available for MappedCollections; use collection:map:'
!!
!MappedCollection methodsFor: 'basic'!
at: key
^domain at: (map at: key)
!
at: key put: value
^domain at: (map at: key) put: value
!
contents
| contents |
contents _ Bag new.
map do: [ :domainKey | contents add: domain at: domainKey ].
^contents
!
size
^domain size
!
add: anObject
self shouldNotImplement
!
contents
| aBag |
aBag _ Bag new.
map do: [ :value | aBag add: (domain at: value) ].
^aBag
!
do: aBlock
map do: [ :value | aBlock value: (domain at: value) ]
!
collect: aBlock
| aStream |
aStream _ WriteStream on: (self species new: self size).
self do: [ :value | aStream nextPut: (aBlock value: value) ].
^aStream contents
!
select: aBlock
| aStream |
aStream _ WriteStream on: (self species new: self size).
self do: [ :value | (aBlock value: value) ifTrue:
[ aStream nextPut: value ] ].
^aStream contents
!!
!MappedCollection methodsFor: 'private'!
setCollection: aCollection andMap: aMap
domain _ aCollection.
map _ aMap
!
species
^domain species
!!